// pages/payment_password_set/index.js
Page({
  data: {
    navBarHeight: 0,
    contentTop: 0,
    bottomSafeArea: 0,
    
    step: 1, // 1: 设置密码, 2: 确认密码
    firstPassword: '',
    secondPassword: '',
    passwordArray: ['', '', '', '', '', ''],
    loading: false,
    
    // 页面模式: set(设置), reset(重置)
    mode: 'set',
    
    // 返回层级（用于重置密码完成后直接返回发起页面）
    redirectDelta: 1,
    
    // 输入框焦点管理
    inputFocus: true,
    inputValue: '', // 输入框的实际值
    inputKey: 'step1' // 用于强制重建输入框的key
  },

  onLoad(options) {
    // 计算导航栏高度
    const systemInfo = wx.getSystemInfoSync()
    const statusBarHeight = systemInfo.statusBarHeight
    const navBarHeight = statusBarHeight + 44
    const bottomSafeArea = systemInfo.safeArea ? systemInfo.screenHeight - systemInfo.safeArea.bottom : 0
    
    this.setData({
      navBarHeight,
      contentTop: navBarHeight + 10, // 增加10px间距避免内容被遮挡
      bottomSafeArea,
      mode: options.mode || 'set',
      redirectDelta: parseInt(options.redirectDelta) || 1
    })

    // 如果是从重置页面跳转过来的，显示提示
    if (options.mode === 'reset' && options.phone) {
      wx.showToast({
        title: '身份验证成功',
        icon: 'success',
        duration: 2000
      })
    }
  },

  // 获取焦点
  getFocus() {
    this.setData({
      inputFocus: true
    })
  },

  // 密码输入
  onPasswordInput(e) {
    const value = e.detail.value
    const password = value.replace(/[^0-9]/g, '').slice(0, 6)
    
    const passwordArray = Array(6).fill('').map((_, index) => {
      return password[index] || ''
    })
    
    this.setData({
      passwordArray,
      inputValue: password
    })
    
    // 如果输入了6位密码
    if (password.length === 6) {
      if (this.data.step === 1) {
        // 第一步，保存密码并进入确认步骤
        this.switchToConfirmStep(password)
      } else {
        // 第二步，验证两次密码是否一致
        this.setData({
          secondPassword: password,
          inputFocus: false
        })
        this.confirmPassword(password)
      }
    }
  },

  // 切换到确认密码步骤
  switchToConfirmStep(password) {
    // 保存第一次输入的密码
    this.setData({
      firstPassword: password,
      inputFocus: false
    })
    
    // 延迟切换步骤，确保当前输入完成
    setTimeout(() => {
      // 完全重置输入状态
      this.setData({
        step: 2,
        passwordArray: ['', '', '', '', '', ''],
        inputValue: '',
        inputKey: 'confirm-step-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9)
      })
      
      // 再次延迟设置焦点，确保输入框完全重建
      setTimeout(() => {
        this.setData({
          inputFocus: true,
          inputValue: '' // 确保输入框为空
        })
      }, 200)
    }, 300)
  },

  // 输入框失焦时清空显示
  onInputBlur() {
    // 只清空显示，不清空实际输入值
    if (this.data.inputValue === '') {
      this.setData({
        passwordArray: ['', '', '', '', '', '']
      })
    }
  },

  // 键盘高度变化时处理
  onKeyboardHeightChange(e) {
    // 键盘收起时清空显示
    if (e.detail.height === 0 && this.data.inputValue === '') {
      this.setData({
        passwordArray: ['', '', '', '', '', '']
      })
    }
  },

  // 确认按钮点击时清空显示
  onInputConfirm() {
    if (this.data.inputValue === '') {
      this.setData({
        passwordArray: ['', '', '', '', '', '']
      })
    }
  },

  // 确认密码
  async confirmPassword(password) {
    if (this.data.firstPassword !== password) {
      wx.showToast({
        title: '两次密码不一致',
        icon: 'none'
      })
      this.resetToFirstStep()
      return
    }
    
    // 密码一致，保存到数据库
    await this.savePassword(password)
  },

  // 保存密码
  async savePassword(password) {
    if (this.data.loading) return
    
    this.setData({ loading: true })
    
    try {
      wx.showLoading({
        title: this.data.mode === 'reset' ? '重置中...' : '设置中...',
        mask: true
      })
      
      // 根据模式调用不同的云函数
      // 重置模式和设置模式都使用 setPaymentPassword 云函数
      const result = await wx.cloud.callFunction({
        name: 'setPaymentPassword',
        data: {
          password: password
        }
      })
      
      if (result.result.success) {
        wx.hideLoading()
        wx.showToast({
          title: this.data.mode === 'reset' ? '重置成功' : '设置成功',
          icon: 'success'
        })
        
        setTimeout(() => {
          wx.navigateBack({
            delta: this.data.redirectDelta
          })
        }, 1500)
      } else {
        throw new Error(result.result.message || (this.data.mode === 'reset' ? '重置失败' : '设置失败'))
      }
    } catch (error) {
      console.error('操作支付密码失败:', error)
      wx.hideLoading()
      wx.showToast({
        title: error.message || (this.data.mode === 'reset' ? '重置失败，请重试' : '设置失败，请重试'),
        icon: 'none'
      })
    } finally {
      this.setData({ loading: false })
    }
  },

  // 重置到第一步
  resetToFirstStep() {
    // 完全重置所有状态
    this.setData({
      step: 1,
      firstPassword: '',
      secondPassword: '',
      passwordArray: ['', '', '', '', '', ''],
      inputFocus: false,
      inputValue: '',
      inputKey: 'reset-step-' + Date.now() + '-' + Math.random().toString(36).substr(2, 9)
    })
    
    // 延迟设置焦点
    setTimeout(() => {
      this.setData({
        inputFocus: true,
        inputValue: ''
      })
    }, 200)
  },

  // 返回上一步
  goBack() {
    if (this.data.step === 2) {
      this.resetToFirstStep()
    } else {
      wx.navigateBack()
    }
  },

  // 返回按钮
  handleBack() {
    this.goBack()
  }
})